package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

/*
一、写入文件（方法1）

	1、打开文件  file, err := os.OpenFile("C:/test.txt", os.O_CREATE|os.O_RDWR, 0666)

	2、写入文件
		file.Write([]byte(str))        //写入字节切片数据
		file.WriteString("直接写入的字符串数据") //直接写入字符串数据

	3、关闭文件流 file.Close()
*/
func writeFile1() {
	file, err := os.OpenFile("./test.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
	defer file.Close()

	if err != nil {
		fmt.Println(err)
		return
	}
	//写如文件
	// for i := 0; i < 10; i++ {
	// 	file.WriteString("直接写入的字符串数据" + strconv.Itoa(i) + "\r\n")
	// }
	var str = "直接写入的字符串数据byte"
	file.Write([]byte(str))
}

/*
二、写入文件（方法2） bufio 写入文件

	1、打开文件  file, err := os.OpenFile("C:/test.txt", os.O_CREATE|os.O_RDWR, 0666)

	2、创建writer对象  writer := bufio.NewWriter(file)

	3、将数据先写入缓存  writer.WriteString("你好golang\r\n")

	4、将缓存中的内容写入文件	writer.Flush()

	5、关闭文件流 file.Close()
*/
func writeFile2() {
	file, err := os.OpenFile("./test.txt", os.O_CREATE|os.O_RDWR|os.O_APPEND, 0666)
	defer file.Close()

	if err != nil {
		fmt.Println("open file failed, err:", err)
		return
	}
	writer := bufio.NewWriter(file)

	// writer.WriteString("你好golang") //将数据先写入缓存
	for i := 0; i < 10; i++ {
		writer.WriteString("直接写入的字符串数据" + strconv.Itoa(i) + "\r\n")
	}

	writer.Flush() //将缓存中的内容写入文件
}

func writeFile3() {
	str := "hello golang"
	// // Deprecated: As of Go 1.16, this function simply calls [os.WriteFile].
	//err := ioutil.WriteFile("./test.txt", []byte(str), 0666)
	err := os.WriteFile("./test.txt", []byte(str), 0666)
	if err != nil {
		fmt.Println("write file failed, err:", err)
		return
	}
}

func main() {
	writeFile1()
	writeFile2()
	writeFile3()
}
